home *** CD-ROM | disk | FTP | other *** search
/ Gekkan Dennou Club 147 / Gekkan Dennou Club - 2000.8 Vol. 147 (Japan).7z / Gekkan Dennou Club - 2000.8 Vol. 147 (Japan) (Track 1).bin / games / hitton / htn_src.lzh / HTN_SRC / HTN_GRAP.C < prev    next >
Text File  |  2000-07-03  |  5KB  |  236 lines

  1. /*    『ひっとん』 ver.1.00    描画関係 (HTN_GRAP.C)        2000  TAU Software    */
  2.  
  3. # include    "HTN_DEF.H"
  4.  
  5.  
  6.  
  7. /******  グラフィック画面  ********************************************/
  8.  
  9.  
  10. /***  グラフィックのGET&PUT ***/
  11.                 /* [返り値]  0:正常終了  1:エラー  */
  12. int GRM_GP(x,y,xl,yl,adr,gp)
  13. int    x,y;            /*  始点座標  */
  14. int    xl,yl;            /*  終点までの距離  */
  15. unsigned char    *adr;        /*  データの始点アドレス  */
  16. int    gp;            /*  1:GET  0:PUT  */
  17. {
  18. # ifdef __GNUC__
  19.     struct GETPTR gpp={x,y,x+xl-1,y+yl-1,adr,adr+xl*yl-1};
  20. # else
  21.     struct GETPTR    gpp;    /*  XC用  */
  22.  
  23.     gpp.x1=x; gpp.y1=y;
  24.     gpp.x2=x+xl-1; gpp.y2=y+yl-1;
  25.     gpp.buf_start=adr;
  26.     gpp.buf_end=adr+xl*yl-1;
  27. # endif
  28.     int (*GET_or_PUT[2])()={ PUTGRM, GETGRM };
  29.  
  30.     return (*(GET_or_PUT+gp))(&gpp);
  31. }
  32.  
  33.  
  34. /***  グラフィックフィル  ***/
  35.                 /* [返り値]  0:正常終了  1:エラー  */
  36. int FILL0(x,y,xl,yl,cl)
  37. int    x,y;            /*  始点座標  */
  38. int    xl,yl;            /*  終点までの距離  */
  39. unsigned short int  cl;        /*  ページ  */
  40. {
  41. # ifdef __GNUC__
  42.     struct FILLPTR  fpp={x,y,x+xl-1,y+yl-1,cl};
  43. # else
  44.     struct FILLPTR fpp;    /* XC用 */
  45.  
  46.     fpp.x1=x1; fpp.y1=y1;
  47.     fpp.x2=x2; fpp.y2=y2;
  48.     fpp.color=cl;
  49. # endif
  50.  
  51.     return FILL(&fpp);
  52. }
  53.  
  54.  
  55.  
  56. /******  テキスト画面  ************************************************/
  57.  
  58.  
  59. /***  テキストフィル  ****/
  60.                 /* [返り値] 無し  */
  61. void TXFILL0(x,y,xl,yl,pg,ptn)
  62. int    x,y;            /*  始点座標  */
  63. int    xl,yl;            /*  終点までの距離  */
  64. int    pg;            /*  テキストプレーン ( 0-3bit が、各プレーンに対応 ) */
  65. unsigned short int  ptn;    /*  フィルパターン  */
  66. {
  67.     unsigned short int mem;        /*  テキスト・アクセス・セット記録用  */
  68. # ifdef __GNUC__
  69.     struct TXFILLPTR tfp={0,x,y,xl,yl,ptn};
  70. # else
  71.     struct TXFILLPTR tfp={0};    /* XC用 */
  72.  
  73.     tfp.x=x; tfp.y=y;
  74.     tfp.x1=xl; tfp.y1=yl;
  75.     tfp.fill_patn=ptn;
  76. # endif
  77.  
  78.     if(pg>=0 && pg<16){
  79.         mem=B_WPEEK((unsigned short int *)0xE8002A);
  80.         B_WPOKE((unsigned short int *)0xE8002A,0x100|(pg<<4));    /* テキスト同時アクセス */
  81.         TXFILL(&tfp);
  82.         B_WPOKE((unsigned short int *)0xE8002A,mem);
  83.     }
  84. }
  85.  
  86.  
  87.  
  88. /***  メッセージ表示  ****/
  89.                 /* [返り値] 無し  */
  90. void PRINT_MES(x,y,mes,cl)
  91. int    x,y;            /*  表示位置  */
  92. char    *mes;            /*  メッセージ  */
  93. int    cl;            /*  色  */
  94. {
  95.     int    i,no;
  96.     unsigned char    moji[]="アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨ゙゚ラリルレロワヲンー!ャュョッ ";
  97.  
  98.  
  99.     while(*mes != '\0'){
  100.         TXFILL0(x,y,18,18,15,0);
  101.         if((no=strchr(moji,*mes)) != NULL) no-=(int)moji; else no=54;
  102.         if(no != 54){
  103.             TCOLOR(1); TEXTPUT(x,y,(struct FNTBUF *)(LTRS(no,0)));
  104.             for(i=1;i<=3;i++){
  105.                 if(cl & (1<<(i-1))){
  106.                      TCOLOR(1<<i);
  107.                      TEXTPUT(x,y,(struct FNTBUF *)(LTRS(no,1)));
  108.                 }
  109.             }
  110.         }
  111.         x+=18;
  112.         mes++;
  113.     }
  114. }
  115.  
  116.  
  117. /***  数字列表示  ****/
  118.                 /* [返り値] 無し  */
  119. void PRINT_TXNUM(x,y,num,zero,fig,cl)
  120. int    x,y;        /*  表示位置  */
  121. int    num,zero,fig;    /*  数字、0詰め、桁数  */
  122. int    cl;        /*  色  */
  123. {
  124.     int    i,pn,no=1;
  125.     char    buf[10],*buf0=buf;    /*  文字格納  */
  126.     unsigned char    dt0[38]={0,10,0,17},dt1[38]={0,10,0,17};    /*  パターン作成用  */
  127.  
  128.     sprintf(buf,"%*d",fig,num);    /*  数字 -> 文字  */
  129.     while(*buf0 != '\0'){
  130.         TXFILL0(x,y,10,17,15,0);
  131.         if(zero==0 && *buf0==' ') *buf0='0';
  132.         if(*buf0 != ' '){
  133.             pn=no;
  134.             no=*buf0-'0';
  135.             for(i=0;i<34;i++){
  136.                 *(dt0+i+4)=*(NUMS(no,0)+i) | (*(NSUB(pn)+i/2))*(1-(i&1));
  137.                 *(dt1+i+4)=*(NUMS(no,1)+i);
  138.             }
  139.             TCOLOR(1); TEXTPUT(x,y,(struct FNTBUF *)dt0);
  140.             for(i=1;i<=3;i++){
  141.                 if(cl & (1<<(i-1))){
  142.                      TCOLOR(1<<i);
  143.                      TEXTPUT(x,y,(struct FNTBUF *)dt1);
  144.                 }
  145.             }
  146.         }
  147.         x+=9;
  148.         buf0++;
  149.     }
  150. }
  151.  
  152.  
  153.  
  154.  
  155. /******  スプライト画面  **********************************************/
  156.  
  157.  
  158. /***  数字表示  ***/
  159.             /* [返り値] 無し  */
  160. void PRINT_SPNUM(sn,x,y,num,zero,fig,pb)
  161. int    sn;        /*  最初のスプライト番号  */
  162. int    x,y;        /*  表示位置  */
  163. int    num,zero,fig;    /*  数字、0詰め、桁数  */
  164. int    pb;        /*  パレットブロック  */
  165. {
  166.     int    z;            /*  雑用  */
  167.     char    buf[10],*buf0=buf;    /*  文字格納  */
  168.  
  169.     sprintf(buf,"%*d",fig,num);    /*  数字 -> 文字  */
  170.     while(*buf0 != '\0'){
  171.         if(zero) z=256; else z=pb*256+55;
  172.         if(*buf0 != ' ') z=pb*256+(*buf0)+7;
  173.         SP_REGST0(sn,x,y,z);
  174.         sn++;
  175.         x+=9;
  176.         buf0++;
  177.     }
  178. }
  179.  
  180.  
  181.  
  182. /*** sprite ***/
  183. void SP_REGST0(sn,x,y,pt)
  184. int    sn,x,y,pt;
  185. {
  186.     B_WPOKE((unsigned short *)(0xEB0000+sn*8),x+16);
  187.     B_WPOKE((unsigned short *)(0xEB0002+sn*8),y+16);
  188.     B_WPOKE((unsigned short *)(0xEB0004+sn*8),pt);
  189.     B_WPOKE((unsigned short *)(0xEB0006+sn*8),1);
  190. }
  191.  
  192.  
  193. void SET_SP_BLOCK(sn,x0,y0,kd,cn)
  194. int    sn;        /*  スプライト面番号  */
  195. int    x0,y0;        /*  表示位置  */
  196. int    kd,cn;        /*  ブロックの種類、連結パターン  */
  197. {
  198.  
  199.     int    pt;
  200.  
  201.     pt=kd*258+cn*12+257;
  202.  
  203.     B_WPOKE((unsigned short *)(0xEB0000+sn*8),x0+16);
  204.     B_WPOKE((unsigned short *)(0xEB0002+sn*8),y0+16);
  205.     B_WPOKE((unsigned short *)(0xEB0004+sn*8),pt);
  206.     B_WPOKE((unsigned short *)(0xEB0006+sn*8),1);
  207.  
  208.     B_WPOKE((unsigned short *)(0xEB0000+sn*8+8),x0+16);
  209.     B_WPOKE((unsigned short *)(0xEB0002+sn*8+8),y0+32);
  210.     B_WPOKE((unsigned short *)(0xEB0004+sn*8+8),pt+1);
  211.     B_WPOKE((unsigned short *)(0xEB0006+sn*8+8),1);
  212.  
  213. }
  214.  
  215.  
  216. /*** BG ***/
  217.             /* [返り値] 無し  */
  218. void SET_BG_BLOCK(pl,xp,kd,cn)
  219. int    pl;        /*  プレイヤー番号  */
  220. int    xp;        /*  表示位置  */
  221. int    kd,cn;        /*  ブロックの種類、連結パターン  */
  222. {
  223.     int z=0;
  224.  
  225.     xp=63-xp*2;
  226.     if(kd != -1) z=kd*264+cn*48+260;
  227.  
  228.     BGTEXTST(pl,xp  ,32,z);
  229.     BGTEXTST(pl,xp+1,32,z+(kd!=-1)*2);
  230.     BGTEXTST(pl,xp  ,33,z+(kd!=-1)*1);
  231.     BGTEXTST(pl,xp+1,33,z+(kd!=-1)*3);
  232.     BGTEXTST(pl,xp  ,34,z+(kd!=-1)*4);
  233.     BGTEXTST(pl,xp+1,34,z+(kd!=-1)*6);
  234. }
  235.  
  236.